﻿2026-05-13T07:18:32.7028195Z ##[group]Run pnpm --filter @rebno/client test:e2e
2026-05-13T07:18:32.7028788Z [36;1mpnpm --filter @rebno/client test:e2e[0m
2026-05-13T07:18:32.7061673Z shell: /usr/bin/bash -e {0}
2026-05-13T07:18:32.7062086Z env:
2026-05-13T07:18:32.7062473Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-13T07:18:32.7063046Z   STAGING_URL: https://staging.rebno.decidel.com
2026-05-13T07:18:32.7063937Z   STAGING_INVITE_TOKEN: ***
2026-05-13T07:18:32.7064611Z   UAT_ACCOUNT_A: ***
2026-05-13T07:18:32.7064997Z   UAT_PASSWORD_A: ***
2026-05-13T07:18:32.7065345Z   UAT_ACCOUNT_B: ***
2026-05-13T07:18:32.7065764Z   UAT_PASSWORD_B: ***
2026-05-13T07:18:32.7066091Z ##[endgroup]
2026-05-13T07:18:33.1424546Z 
2026-05-13T07:18:33.1455489Z > @rebno/client@0.1.0 test:e2e /home/runner/work/rebno/rebno/apps/client
2026-05-13T07:18:33.1462598Z > playwright test
2026-05-13T07:18:33.1498160Z 
2026-05-13T07:18:34.4442341Z 
2026-05-13T07:18:34.4443246Z Running 21 tests using 1 worker
2026-05-13T07:18:34.4443902Z 
2026-05-13T07:18:46.5176324Z   ✘   1 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (10.8s)
2026-05-13T07:18:58.8154751Z   ✘   2 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (retry #1) (10.9s)
2026-05-13T07:19:13.4088707Z   ✘   3 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (13.3s)
2026-05-13T07:19:27.7123020Z   ✘   4 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (retry #1) (13.0s)
2026-05-13T07:19:35.4732011Z   ✘   5 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (6.8s)
2026-05-13T07:19:43.2945777Z   ✘   6 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (retry #1) (6.9s)
2026-05-13T07:20:09.5926508Z   ✘   7 [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) (25.1s)
2026-05-13T07:20:23.2732157Z   ✘   8 [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) (retry #1) (12.6s)
2026-05-13T07:20:39.7656050Z   ✘   9 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (15.2s)
2026-05-13T07:20:56.1033154Z   ✘  10 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (retry #1) (15.1s)
2026-05-13T07:21:08.5330766Z   ✘  11 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (11.4s)
2026-05-13T07:21:34.6881639Z   ✘  12 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (retry #1) (25.0s)
2026-05-13T07:21:41.3257038Z   ✘  13 [chromium] › test/e2e/cookie-reload.e2e.test.ts:15:1 › Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (5.8s)
2026-05-13T07:21:48.1290832Z   ✘  14 [chromium] › test/e2e/cookie-reload.e2e.test.ts:15:1 › Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (retry #1) (5.9s)
2026-05-13T07:22:05.3681905Z   ✘  15 [chromium] › test/e2e/login-contrast.e2e.test.ts:61:3 › LoginScene contrast › heading has ≥ 4.5:1 contrast ratio on #0A0E1A background (16.5s)
2026-05-13T07:22:22.4739155Z   ✘  16 [chromium] › test/e2e/login-contrast.e2e.test.ts:61:3 › LoginScene contrast › heading has ≥ 4.5:1 contrast ratio on #0A0E1A background (retry #1) (16.3s)
2026-05-13T07:22:39.8843601Z   ✘  17 [chromium] › test/e2e/login-contrast.e2e.test.ts:69:3 › LoginScene contrast › username label has ≥ 4.5:1 contrast ratio (16.6s)
2026-05-13T07:22:57.0775136Z   ✘  18 [chromium] › test/e2e/login-contrast.e2e.test.ts:69:3 › LoginScene contrast › username label has ≥ 4.5:1 contrast ratio (retry #1) (16.4s)
2026-05-13T07:23:14.3235000Z   ✘  19 [chromium] › test/e2e/login-contrast.e2e.test.ts:75:3 › LoginScene contrast › password label has ≥ 4.5:1 contrast ratio (16.5s)
2026-05-13T07:23:31.5381253Z   ✘  20 [chromium] › test/e2e/login-contrast.e2e.test.ts:75:3 › LoginScene contrast › password label has ≥ 4.5:1 contrast ratio (retry #1) (16.5s)
2026-05-13T07:23:48.7533887Z   ✘  21 [chromium] › test/e2e/login-contrast.e2e.test.ts:81:3 › LoginScene contrast › username input text has ≥ 4.5:1 contrast ratio (16.4s)
2026-05-13T07:24:05.9558670Z   ✘  22 [chromium] › test/e2e/login-contrast.e2e.test.ts:81:3 › LoginScene contrast › username input text has ≥ 4.5:1 contrast ratio (retry #1) (16.5s)
2026-05-13T07:24:23.0626317Z   ✘  23 [chromium] › test/e2e/login-contrast.e2e.test.ts:87:3 › LoginScene contrast › password input text has ≥ 4.5:1 contrast ratio (16.3s)
2026-05-13T07:24:40.2327199Z   ✘  24 [chromium] › test/e2e/login-contrast.e2e.test.ts:87:3 › LoginScene contrast › password input text has ≥ 4.5:1 contrast ratio (retry #1) (16.4s)
2026-05-13T07:24:57.3377769Z   ✘  25 [chromium] › test/e2e/login-contrast.e2e.test.ts:93:3 › LoginScene contrast › submit CTA button text has ≥ 4.5:1 contrast ratio (16.3s)
2026-05-13T07:25:14.5864404Z   ✘  26 [chromium] › test/e2e/login-contrast.e2e.test.ts:93:3 › LoginScene contrast › submit CTA button text has ≥ 4.5:1 contrast ratio (retry #1) (16.5s)
2026-05-13T07:25:31.6644005Z   ✘  27 [chromium] › test/e2e/login-contrast.e2e.test.ts:101:3 › LoginScene contrast › focused input border-color is accent #22D3EE (rgb 34,211,238) (16.3s)
2026-05-13T07:25:48.9025990Z   ✘  28 [chromium] › test/e2e/login-contrast.e2e.test.ts:101:3 › LoginScene contrast › focused input border-color is accent #22D3EE (rgb 34,211,238) (retry #1) (16.5s)
2026-05-13T07:26:01.3339014Z   ✘  29 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (11.4s)
2026-05-13T07:26:13.9236120Z   ✘  30 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (retry #1) (11.6s)
2026-05-13T07:26:20.9254389Z   ✓  31 [chromium] › test/e2e/logout.e2e.test.ts:51:3 › Esc menu › canvas click opens menu (D-24 secondary trigger) (6.3s)
2026-05-13T07:26:28.7091588Z   ✓  32 [chromium] › test/e2e/logout.e2e.test.ts:69:3 › Esc menu › Resume closes menu and re-engages movement without navigating (7.8s)
2026-05-13T07:26:35.4511671Z   ✘  33 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (6.4s)
2026-05-13T07:26:54.6476192Z   ✘  34 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (retry #1) (18.3s)
2026-05-13T07:27:00.9996690Z   ✓  35 [chromium] › test/e2e/sprite-state.e2e.test.ts:48:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate DOM mirror is visible for self (count >= 1) (5.7s)
2026-05-13T07:27:06.5352456Z   ✓  36 [chromium] › test/e2e/sprite-state.e2e.test.ts:61:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate text content matches logged-in username (5.5s)
2026-05-13T07:27:13.6350660Z   ✘  37 [chromium] › test/e2e/ws-kill-reconnect.e2e.test.ts:16:1 › WS-kill: login → kill WS → SDK reconnects within grace → canvas still truthy + chat round-trips (6.8s)
2026-05-13T07:27:32.7541622Z   ✘  38 [chromium] › test/e2e/ws-kill-reconnect.e2e.test.ts:16:1 › WS-kill: login → kill WS → SDK reconnects within grace → canvas still truthy + chat round-trips (retry #1) (18.2s)
2026-05-13T07:27:32.7744021Z 
2026-05-13T07:27:32.7751999Z 
2026-05-13T07:27:32.7766839Z   1) [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-13T07:27:32.7767971Z 
2026-05-13T07:27:32.7768482Z     Error: Camera did not pan: before=(0,0) after=(0,0)
2026-05-13T07:27:32.7768998Z 
2026-05-13T07:27:32.7769987Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-13T07:27:32.7770755Z 
2026-05-13T07:27:32.7771091Z     Expected: >= [32m8[39m
2026-05-13T07:27:32.7771681Z     Received:    [31m0[39m
2026-05-13T07:27:32.7772072Z 
2026-05-13T07:27:32.7772328Z       80 |     cameraDelta,
2026-05-13T07:27:32.7773220Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-13T07:27:32.7774746Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-13T07:27:32.7775333Z          |     ^
2026-05-13T07:27:32.7775769Z       83 |
2026-05-13T07:27:32.7776545Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-13T07:27:32.7777556Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-13T07:27:32.7778661Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-13T07:27:32.7779369Z 
2026-05-13T07:27:32.7780273Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.7781732Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/test-failed-1.png
2026-05-13T07:27:32.7783303Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7783940Z 
2026-05-13T07:27:32.7785003Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7786425Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/video.webm
2026-05-13T07:27:32.7787978Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7788579Z 
2026-05-13T07:27:32.7789520Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/error-context.md
2026-05-13T07:27:32.7790559Z 
2026-05-13T07:27:32.7791442Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.7792852Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-13T07:27:32.7793851Z     Usage:
2026-05-13T07:27:32.7794414Z 
2026-05-13T07:27:32.7795360Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-13T07:27:32.7796523Z 
2026-05-13T07:27:32.7797356Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7798015Z 
2026-05-13T07:27:32.7799093Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7799765Z 
2026-05-13T07:27:32.7800187Z     Error: Camera did not pan: before=(0,0) after=(0,0)
2026-05-13T07:27:32.7800728Z 
2026-05-13T07:27:32.7801655Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-13T07:27:32.7802484Z 
2026-05-13T07:27:32.7802857Z     Expected: >= [32m8[39m
2026-05-13T07:27:32.7803437Z     Received:    [31m0[39m
2026-05-13T07:27:32.7803802Z 
2026-05-13T07:27:32.7804054Z       80 |     cameraDelta,
2026-05-13T07:27:32.7805188Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-13T07:27:32.7806447Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-13T07:27:32.7806968Z          |     ^
2026-05-13T07:27:32.7807655Z       83 |
2026-05-13T07:27:32.7808430Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-13T07:27:32.7809398Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-13T07:27:32.7810437Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-13T07:27:32.7811048Z 
2026-05-13T07:27:32.7811914Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.7813440Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.7815219Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7815857Z 
2026-05-13T07:27:32.7816741Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7818015Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/video.webm
2026-05-13T07:27:32.7819438Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7820000Z 
2026-05-13T07:27:32.7820836Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/error-context.md
2026-05-13T07:27:32.7821756Z 
2026-05-13T07:27:32.7822490Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.7823667Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-13T07:27:32.7824790Z     Usage:
2026-05-13T07:27:32.7825211Z 
2026-05-13T07:27:32.7826124Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-13T07:27:32.7827181Z 
2026-05-13T07:27:32.7827920Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7828496Z 
2026-05-13T07:27:32.7829974Z   2) [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-13T07:27:32.7830928Z 
2026-05-13T07:27:32.7831559Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 0 (samples=)
2026-05-13T07:27:32.7832162Z 
2026-05-13T07:27:32.7832950Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-13T07:27:32.7833690Z 
2026-05-13T07:27:32.7834047Z     Expected: >= [32m3[39m
2026-05-13T07:27:32.7834772Z     Received:    [31m0[39m
2026-05-13T07:27:32.7835138Z 
2026-05-13T07:27:32.7835415Z       67 |     unique.size,
2026-05-13T07:27:32.7836494Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-13T07:27:32.7837748Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-13T07:27:32.7838301Z          |     ^
2026-05-13T07:27:32.7838733Z       70 |
2026-05-13T07:27:32.7839427Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-13T07:27:32.7840170Z       72 |   for (const f of unique) {
2026-05-13T07:27:32.7841005Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-13T07:27:32.7841669Z 
2026-05-13T07:27:32.7842483Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.7843883Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-13T07:27:32.7845684Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7846282Z 
2026-05-13T07:27:32.7847107Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7848382Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/video.webm
2026-05-13T07:27:32.7849714Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7850294Z 
2026-05-13T07:27:32.7851225Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-13T07:27:32.7852124Z 
2026-05-13T07:27:32.7852987Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.7854363Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-13T07:27:32.7855233Z     Usage:
2026-05-13T07:27:32.7855549Z 
2026-05-13T07:27:32.7856435Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-13T07:27:32.7857506Z 
2026-05-13T07:27:32.7858337Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7858949Z 
2026-05-13T07:27:32.7859720Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7860616Z 
2026-05-13T07:27:32.7861355Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 0 (samples=)
2026-05-13T07:27:32.7862021Z 
2026-05-13T07:27:32.7862932Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-13T07:27:32.7863750Z 
2026-05-13T07:27:32.7864120Z     Expected: >= [32m3[39m
2026-05-13T07:27:32.7864886Z     Received:    [31m0[39m
2026-05-13T07:27:32.7865277Z 
2026-05-13T07:27:32.7865562Z       67 |     unique.size,
2026-05-13T07:27:32.7866799Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-13T07:27:32.7868051Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-13T07:27:32.7868648Z          |     ^
2026-05-13T07:27:32.7869107Z       70 |
2026-05-13T07:27:32.7869813Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-13T07:27:32.7870644Z       72 |   for (const f of unique) {
2026-05-13T07:27:32.7871577Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-13T07:27:32.7872299Z 
2026-05-13T07:27:32.7873173Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.7874760Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.7876231Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7876768Z 
2026-05-13T07:27:32.7877445Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7878745Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-13T07:27:32.7880326Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7881030Z 
2026-05-13T07:27:32.7882031Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-13T07:27:32.7883071Z 
2026-05-13T07:27:32.7883986Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.7885475Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-13T07:27:32.7886443Z     Usage:
2026-05-13T07:27:32.7886757Z 
2026-05-13T07:27:32.7887803Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-13T07:27:32.7888797Z 
2026-05-13T07:27:32.7889600Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7890203Z 
2026-05-13T07:27:32.7891458Z   3) [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-13T07:27:32.7892738Z 
2026-05-13T07:27:32.7897858Z     Error: __rebno.cameraScrollX must be populated by GameScene update hook (Plan 06.1-06 S-08)
2026-05-13T07:27:32.7899079Z 
2026-05-13T07:27:32.7899808Z     [2mexpect([22m[31mreceived[39m[2m).[22mnot[2m.[22mtoBeNull[2m()[22m
2026-05-13T07:27:32.7900439Z 
2026-05-13T07:27:32.7900798Z     Received: [31mnull[39m
2026-05-13T07:27:32.7901187Z 
2026-05-13T07:27:32.7901470Z       52 |     before,
2026-05-13T07:27:32.7902350Z       53 |     '__rebno.cameraScrollX must be populated by GameScene update hook (Plan 06.1-06 S-08)',
2026-05-13T07:27:32.7903247Z     > 54 |   ).not.toBeNull();
2026-05-13T07:27:32.7903780Z          |         ^
2026-05-13T07:27:32.7904652Z       55 |
2026-05-13T07:27:32.7905348Z       56 |   // 4. Hold KeyD for 300 ms. Math: RUN_SPEED=5 px/tick x (300 ms / 33.33 ms/tick)
2026-05-13T07:27:32.7906405Z       57 |   //    ~= 45 px of intended motion; deadzone is 32 px so >=13 px of camera scroll
2026-05-13T07:27:32.7907521Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:54:9
2026-05-13T07:27:32.7908201Z 
2026-05-13T07:27:32.7909072Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.7910404Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-13T07:27:32.7911916Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7912513Z 
2026-05-13T07:27:32.7913333Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7914763Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/video.webm
2026-05-13T07:27:32.7916293Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7916977Z 
2026-05-13T07:27:32.7917822Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-13T07:27:32.7918757Z 
2026-05-13T07:27:32.7919586Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.7920827Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-13T07:27:32.7921735Z     Usage:
2026-05-13T07:27:32.7922055Z 
2026-05-13T07:27:32.7922958Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-13T07:27:32.7923958Z 
2026-05-13T07:27:32.7924921Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7925566Z 
2026-05-13T07:27:32.7926320Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7927219Z 
2026-05-13T07:27:32.7927864Z     Error: __rebno.cameraScrollX must be populated by GameScene update hook (Plan 06.1-06 S-08)
2026-05-13T07:27:32.7928563Z 
2026-05-13T07:27:32.7929211Z     [2mexpect([22m[31mreceived[39m[2m).[22mnot[2m.[22mtoBeNull[2m()[22m
2026-05-13T07:27:32.7929829Z 
2026-05-13T07:27:32.7930195Z     Received: [31mnull[39m
2026-05-13T07:27:32.7930617Z 
2026-05-13T07:27:32.7930885Z       52 |     before,
2026-05-13T07:27:32.7931656Z       53 |     '__rebno.cameraScrollX must be populated by GameScene update hook (Plan 06.1-06 S-08)',
2026-05-13T07:27:32.7932485Z     > 54 |   ).not.toBeNull();
2026-05-13T07:27:32.7933022Z          |         ^
2026-05-13T07:27:32.7933473Z       55 |
2026-05-13T07:27:32.7934327Z       56 |   // 4. Hold KeyD for 300 ms. Math: RUN_SPEED=5 px/tick x (300 ms / 33.33 ms/tick)
2026-05-13T07:27:32.7935642Z       57 |   //    ~= 45 px of intended motion; deadzone is 32 px so >=13 px of camera scroll
2026-05-13T07:27:32.7936770Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:54:9
2026-05-13T07:27:32.7937422Z 
2026-05-13T07:27:32.7938263Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.7939770Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.7941707Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7942281Z 
2026-05-13T07:27:32.7943020Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7944496Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-13T07:27:32.7946005Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7946668Z 
2026-05-13T07:27:32.7947579Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-13T07:27:32.7948614Z 
2026-05-13T07:27:32.7949506Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.7950913Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-13T07:27:32.7951794Z     Usage:
2026-05-13T07:27:32.7952104Z 
2026-05-13T07:27:32.7953050Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-13T07:27:32.7954344Z 
2026-05-13T07:27:32.7955143Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7955812Z 
2026-05-13T07:27:32.7957029Z   4) [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) 
2026-05-13T07:27:32.7958229Z 
2026-05-13T07:27:32.7959013Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-13T07:27:32.7959675Z 
2026-05-13T07:27:32.7960119Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-13T07:27:32.7960698Z     Expected: visible
2026-05-13T07:27:32.7961164Z     Timeout: 15000ms
2026-05-13T07:27:32.7961698Z     Error: element(s) not found
2026-05-13T07:27:32.7962083Z 
2026-05-13T07:27:32.7962356Z     Call log:
2026-05-13T07:27:32.7963169Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-13T07:27:32.7964275Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-13T07:27:32.7964877Z 
2026-05-13T07:27:32.7965015Z 
2026-05-13T07:27:32.7965298Z        at fixtures.ts:172
2026-05-13T07:27:32.7965902Z 
2026-05-13T07:27:32.7966176Z       170 |  */
2026-05-13T07:27:32.7966895Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-13T07:27:32.7968065Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-13T07:27:32.7969077Z           |                                                                ^
2026-05-13T07:27:32.7969792Z       173 |     timeout: 15_000,
2026-05-13T07:27:32.7970340Z       174 |   });
2026-05-13T07:27:32.7970811Z       175 | }
2026-05-13T07:27:32.7971744Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-13T07:27:32.7973144Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-nameplate.e2e.test.ts:40:11
2026-05-13T07:27:32.7973938Z 
2026-05-13T07:27:32.7974821Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.7976128Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-13T07:27:32.7977814Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7978442Z 
2026-05-13T07:27:32.7979214Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.7980491Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/test-failed-2.png
2026-05-13T07:27:32.7982118Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7982714Z 
2026-05-13T07:27:32.7983556Z     Error Context: test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-13T07:27:32.7984676Z 
2026-05-13T07:27:32.7985492Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.7986719Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-13T07:27:32.7987654Z     Usage:
2026-05-13T07:27:32.7987950Z 
2026-05-13T07:27:32.7988868Z         pnpm exec playwright show-trace test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-13T07:27:32.7990025Z 
2026-05-13T07:27:32.7990735Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7991318Z 
2026-05-13T07:27:32.7992023Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.7992614Z 
2026-05-13T07:27:32.7993330Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeAttached[2m([22m[2m)[22m failed
2026-05-13T07:27:32.7993971Z 
2026-05-13T07:27:32.7994815Z     Locator: locator('[data-nameplate="***"]')
2026-05-13T07:27:32.7995428Z     Expected: attached
2026-05-13T07:27:32.7996245Z     Error: strict mode violation: locator('[data-nameplate="***"]') resolved to 9 elements:
2026-05-13T07:27:32.7998416Z         1) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="qa7BoRmh3" data-nameplate-role="remote" data-nameplate-color="#FFFFFF">***</div> aka getByText('***').first()
2026-05-13T07:27:32.8000840Z         2) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="UjfDNb25-" data-nameplate-role="remote" data-nameplate-color="#FFFFFF">***</div> aka getByText('***').nth(1)
2026-05-13T07:27:32.8003206Z         3) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="gGXDhA5Lq" data-nameplate-role="remote" data-nameplate-color="#FFFFFF">***</div> aka getByText('***').nth(2)
2026-05-13T07:27:32.8005917Z         4) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="tYF3ZWZXl" data-nameplate-role="remote" data-nameplate-color="#FFFFFF">***</div> aka getByText('***').nth(3)
2026-05-13T07:27:32.8008710Z         5) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="b1VDLfah1" data-nameplate-role="remote" data-nameplate-color="#FFFFFF">***</div> aka getByText('***').nth(4)
2026-05-13T07:27:32.8011487Z         6) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="TG8MWNECy" data-nameplate-role="remote" data-nameplate-color="#FFFFFF">***</div> aka getByText('***').nth(5)
2026-05-13T07:27:32.8014381Z         7) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="7HVG0aXit" data-nameplate-role="remote" data-nameplate-color="#FFFFFF">***</div> aka locator('div:nth-child(10)')
2026-05-13T07:27:32.8017180Z         8) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="zL83oZTRL" data-nameplate-role="remote" data-nameplate-color="#FFFFFF">***</div> aka locator('div:nth-child(11)')
2026-05-13T07:27:32.8019968Z         9) <div data-x-coord="439" data-y-coord="382" data-nameplate="***" data-player-id="3aNMf4OJl" data-nameplate-role="local" data-nameplate-color="#00FFFF">***</div> aka locator('div:nth-child(12)')
2026-05-13T07:27:32.8021374Z 
2026-05-13T07:27:32.8021661Z     Call log:
2026-05-13T07:27:32.8022590Z     [2m  - Expect "toBeAttached" with timeout 10000ms[22m
2026-05-13T07:27:32.8023653Z     [2m  - waiting for locator('[data-nameplate="***"]')[22m
2026-05-13T07:27:32.8024332Z 
2026-05-13T07:27:32.8024469Z 
2026-05-13T07:27:32.8024755Z       46 |     await expect(
2026-05-13T07:27:32.8025529Z       47 |       a.locator(`[data-nameplate="${accountA.username}"]`),
2026-05-13T07:27:32.8026360Z     > 48 |     ).toBeAttached({ timeout: 10_000 });
2026-05-13T07:27:32.8027001Z          |       ^
2026-05-13T07:27:32.8027474Z       49 |
2026-05-13T07:27:32.8028006Z       50 |     const localColor = await a
2026-05-13T07:27:32.8028806Z       51 |       .locator(`[data-nameplate="${accountA.username}"]`)
2026-05-13T07:27:32.8029950Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-nameplate.e2e.test.ts:48:7
2026-05-13T07:27:32.8030749Z 
2026-05-13T07:27:32.8031650Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8033375Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.8035180Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8035763Z 
2026-05-13T07:27:32.8036483Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8037658Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/test-failed-2.png
2026-05-13T07:27:32.8039040Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8039645Z 
2026-05-13T07:27:32.8040614Z     Error Context: test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-13T07:27:32.8042472Z 
2026-05-13T07:27:32.8043386Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8044763Z     test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-13T07:27:32.8045942Z     Usage:
2026-05-13T07:27:32.8046453Z 
2026-05-13T07:27:32.8047388Z         pnpm exec playwright show-trace test-results/cli-08-nameplate.e2e-CLI-0-0c7f8-e-FFFFFF-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-13T07:27:32.8048587Z 
2026-05-13T07:27:32.8049386Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8050002Z 
2026-05-13T07:27:32.8050960Z   5) [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-13T07:27:32.8051965Z 
2026-05-13T07:27:32.8052921Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoContain[2m([22m[32mexpected[39m[2m) // indexOf[22m
2026-05-13T07:27:32.8053643Z 
2026-05-13T07:27:32.8054063Z     Expected value: [32m"atlas-mvp"[39m
2026-05-13T07:27:32.8054869Z     Received array: [31m[][39m
2026-05-13T07:27:32.8055294Z 
2026-05-13T07:27:32.8055541Z     Call Log:
2026-05-13T07:27:32.8056144Z     - Timeout 10000ms exceeded while waiting on the predicate
2026-05-13T07:27:32.8056643Z 
2026-05-13T07:27:32.8057161Z       35 |   //    queues it on scene preload). Polled to avoid race with the TextureManager
2026-05-13T07:27:32.8058058Z       36 |   //    finishing its onload promise mid-frame.
2026-05-13T07:27:32.8058666Z     > 37 |   await expect
2026-05-13T07:27:32.8059150Z          |   ^
2026-05-13T07:27:32.8059570Z       38 |     .poll(
2026-05-13T07:27:32.8060078Z       39 |       async () =>
2026-05-13T07:27:32.8060656Z       40 |         page.evaluate(
2026-05-13T07:27:32.8061526Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:37:3
2026-05-13T07:27:32.8062198Z 
2026-05-13T07:27:32.8063083Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8064546Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-13T07:27:32.8066363Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8067015Z 
2026-05-13T07:27:32.8067881Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8069260Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/video.webm
2026-05-13T07:27:32.8070665Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8071235Z 
2026-05-13T07:27:32.8071999Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-13T07:27:32.8073014Z 
2026-05-13T07:27:32.8074338Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8075569Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-13T07:27:32.8076511Z     Usage:
2026-05-13T07:27:32.8076824Z 
2026-05-13T07:27:32.8077716Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-13T07:27:32.8078852Z 
2026-05-13T07:27:32.8079624Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8080193Z 
2026-05-13T07:27:32.8080899Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8081494Z 
2026-05-13T07:27:32.8082329Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoContain[2m([22m[32mexpected[39m[2m) // indexOf[22m
2026-05-13T07:27:32.8083063Z 
2026-05-13T07:27:32.8083510Z     Expected value: [32m"atlas-mvp"[39m
2026-05-13T07:27:32.8084315Z     Received array: [31m[][39m
2026-05-13T07:27:32.8084728Z 
2026-05-13T07:27:32.8084987Z     Call Log:
2026-05-13T07:27:32.8085612Z     - Timeout 10000ms exceeded while waiting on the predicate
2026-05-13T07:27:32.8086127Z 
2026-05-13T07:27:32.8086625Z       35 |   //    queues it on scene preload). Polled to avoid race with the TextureManager
2026-05-13T07:27:32.8087429Z       36 |   //    finishing its onload promise mid-frame.
2026-05-13T07:27:32.8088024Z     > 37 |   await expect
2026-05-13T07:27:32.8088504Z          |   ^
2026-05-13T07:27:32.8088972Z       38 |     .poll(
2026-05-13T07:27:32.8089561Z       39 |       async () =>
2026-05-13T07:27:32.8090196Z       40 |         page.evaluate(
2026-05-13T07:27:32.8091211Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:37:3
2026-05-13T07:27:32.8092027Z 
2026-05-13T07:27:32.8092841Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8094530Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.8096398Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8097064Z 
2026-05-13T07:27:32.8097947Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8099397Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-13T07:27:32.8100989Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8101634Z 
2026-05-13T07:27:32.8102659Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-13T07:27:32.8103732Z 
2026-05-13T07:27:32.8104710Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8106354Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-13T07:27:32.8107454Z     Usage:
2026-05-13T07:27:32.8107779Z 
2026-05-13T07:27:32.8108891Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-13T07:27:32.8110033Z 
2026-05-13T07:27:32.8110853Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8111513Z 
2026-05-13T07:27:32.8112738Z   6) [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-13T07:27:32.8113787Z 
2026-05-13T07:27:32.8114867Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-13T07:27:32.8115733Z 
2026-05-13T07:27:32.8116184Z     Expected: [32m"mvp-room"[39m
2026-05-13T07:27:32.8116890Z     Received: [31mundefined[39m
2026-05-13T07:27:32.8117313Z 
2026-05-13T07:27:32.8118081Z       43 |       () => (window as unknown as { __rebno?: { roomId?: string } }).__rebno?.roomId,
2026-05-13T07:27:32.8118923Z       44 |     );
2026-05-13T07:27:32.8119507Z     > 45 |     expect(roomIdA).toBe('mvp-room');
2026-05-13T07:27:32.8120181Z          |                     ^
2026-05-13T07:27:32.8121187Z       46 |     await expect(a.locator('canvas[data-room-id="mvp-room"]')).toBeAttached({ timeout: 5_000 });
2026-05-13T07:27:32.8122081Z       47 |
2026-05-13T07:27:32.8122673Z       48 |     // (2) Each client sees the OTHER's nameplate (DOM-mirror per remote
2026-05-13T07:27:32.8123619Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:45:21
2026-05-13T07:27:32.8124454Z 
2026-05-13T07:27:32.8125223Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8126413Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-1.png
2026-05-13T07:27:32.8127797Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8128572Z 
2026-05-13T07:27:32.8129667Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8131450Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-2.png
2026-05-13T07:27:32.8132749Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8133364Z 
2026-05-13T07:27:32.8134593Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/error-context.md
2026-05-13T07:27:32.8135636Z 
2026-05-13T07:27:32.8136536Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8137974Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-13T07:27:32.8138760Z     Usage:
2026-05-13T07:27:32.8139015Z 
2026-05-13T07:27:32.8139920Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-13T07:27:32.8140821Z 
2026-05-13T07:27:32.8141613Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8142256Z 
2026-05-13T07:27:32.8143080Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8143762Z 
2026-05-13T07:27:32.8144684Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-13T07:27:32.8145369Z 
2026-05-13T07:27:32.8145807Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-13T07:27:32.8146506Z     Expected: visible
2026-05-13T07:27:32.8147030Z     Timeout: 15000ms
2026-05-13T07:27:32.8147529Z     Error: element(s) not found
2026-05-13T07:27:32.8147904Z 
2026-05-13T07:27:32.8148144Z     Call log:
2026-05-13T07:27:32.8148828Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-13T07:27:32.8149768Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-13T07:27:32.8150285Z 
2026-05-13T07:27:32.8150418Z 
2026-05-13T07:27:32.8150663Z        at fixtures.ts:172
2026-05-13T07:27:32.8151041Z 
2026-05-13T07:27:32.8151295Z       170 |  */
2026-05-13T07:27:32.8152008Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-13T07:27:32.8153001Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-13T07:27:32.8153951Z           |                                                                ^
2026-05-13T07:27:32.8154863Z       173 |     timeout: 15_000,
2026-05-13T07:27:32.8155377Z       174 |   });
2026-05-13T07:27:32.8155824Z       175 | }
2026-05-13T07:27:32.8156685Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-13T07:27:32.8157830Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:38:11
2026-05-13T07:27:32.8158686Z 
2026-05-13T07:27:32.8159509Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8160828Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.8162711Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8163358Z 
2026-05-13T07:27:32.8164351Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8165890Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-2.png
2026-05-13T07:27:32.8167554Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8168416Z 
2026-05-13T07:27:32.8169444Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/error-context.md
2026-05-13T07:27:32.8170569Z 
2026-05-13T07:27:32.8171368Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8172531Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-13T07:27:32.8173377Z     Usage:
2026-05-13T07:27:32.8173640Z 
2026-05-13T07:27:32.8174834Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-13T07:27:32.8176157Z 
2026-05-13T07:27:32.8176966Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8177535Z 
2026-05-13T07:27:32.8178550Z   7) [chromium] › test/e2e/cookie-reload.e2e.test.ts:15:1 › Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-13T07:27:32.8179513Z 
2026-05-13T07:27:32.8180414Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-13T07:27:32.8181194Z 
2026-05-13T07:27:32.8181606Z     Expected: [32m"mvp-room"[39m
2026-05-13T07:27:32.8182257Z     Received: [31mundefined[39m
2026-05-13T07:27:32.8182644Z 
2026-05-13T07:27:32.8183153Z       26 |     () => (window as unknown as { __rebno?: { roomId?: string } }).__rebno?.roomId,
2026-05-13T07:27:32.8183848Z       27 |   );
2026-05-13T07:27:32.8184683Z     > 28 |   expect(initialRoomId).toBe('mvp-room');
2026-05-13T07:27:32.8185499Z          |                         ^
2026-05-13T07:27:32.8186167Z       29 |
2026-05-13T07:27:32.8187419Z       30 |   // 2. Reload the page — this triggers the cookie auto-login fast-path.
2026-05-13T07:27:32.8188456Z       31 |   await page.reload();
2026-05-13T07:27:32.8189322Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cookie-reload.e2e.test.ts:28:25
2026-05-13T07:27:32.8189958Z 
2026-05-13T07:27:32.8190676Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8192488Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/test-failed-1.png
2026-05-13T07:27:32.8194326Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8195071Z 
2026-05-13T07:27:32.8195801Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8196913Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/video.webm
2026-05-13T07:27:32.8198303Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8199038Z 
2026-05-13T07:27:32.8200339Z     Error Context: test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/error-context.md
2026-05-13T07:27:32.8201482Z 
2026-05-13T07:27:32.8202445Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8203735Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/trace.zip
2026-05-13T07:27:32.8204781Z     Usage:
2026-05-13T07:27:32.8205111Z 
2026-05-13T07:27:32.8206032Z         pnpm exec playwright show-trace test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium/trace.zip
2026-05-13T07:27:32.8207003Z 
2026-05-13T07:27:32.8207711Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8208298Z 
2026-05-13T07:27:32.8209003Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8209587Z 
2026-05-13T07:27:32.8210436Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-13T07:27:32.8211219Z 
2026-05-13T07:27:32.8211613Z     Expected: [32m"mvp-room"[39m
2026-05-13T07:27:32.8212305Z     Received: [31mundefined[39m
2026-05-13T07:27:32.8212716Z 
2026-05-13T07:27:32.8213240Z       26 |     () => (window as unknown as { __rebno?: { roomId?: string } }).__rebno?.roomId,
2026-05-13T07:27:32.8213903Z       27 |   );
2026-05-13T07:27:32.8214675Z     > 28 |   expect(initialRoomId).toBe('mvp-room');
2026-05-13T07:27:32.8215381Z          |                         ^
2026-05-13T07:27:32.8215935Z       29 |
2026-05-13T07:27:32.8216837Z       30 |   // 2. Reload the page — this triggers the cookie auto-login fast-path.
2026-05-13T07:27:32.8217704Z       31 |   await page.reload();
2026-05-13T07:27:32.8218686Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cookie-reload.e2e.test.ts:28:25
2026-05-13T07:27:32.8219460Z 
2026-05-13T07:27:32.8220338Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8221935Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.8223822Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8224585Z 
2026-05-13T07:27:32.8225436Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8226931Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/video.webm
2026-05-13T07:27:32.8228582Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8229244Z 
2026-05-13T07:27:32.8230313Z     Error Context: test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/error-context.md
2026-05-13T07:27:32.8231429Z 
2026-05-13T07:27:32.8232490Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8234010Z     test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-13T07:27:32.8235246Z     Usage:
2026-05-13T07:27:32.8235568Z 
2026-05-13T07:27:32.8236786Z         pnpm exec playwright show-trace test-results/cookie-reload.e2e-Cookie-a-decbf-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-13T07:27:32.8237998Z 
2026-05-13T07:27:32.8238820Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8239470Z 
2026-05-13T07:27:32.8240693Z   8) [chromium] › test/e2e/login-contrast.e2e.test.ts:61:3 › LoginScene contrast › heading has ≥ 4.5:1 contrast ratio on #0A0E1A background 
2026-05-13T07:27:32.8241727Z 
2026-05-13T07:27:32.8242260Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8243023Z     Call log:
2026-05-13T07:27:32.8243883Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8244609Z 
2026-05-13T07:27:32.8244748Z 
2026-05-13T07:27:32.8245313Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8246206Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8247397Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8248309Z          |                ^
2026-05-13T07:27:32.8248874Z       58 |   });
2026-05-13T07:27:32.8249346Z       59 |
2026-05-13T07:27:32.8249917Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8250970Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8251754Z 
2026-05-13T07:27:32.8252659Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8254335Z     test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium/test-failed-1.png
2026-05-13T07:27:32.8256012Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8256901Z 
2026-05-13T07:27:32.8257757Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8259189Z     test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium/video.webm
2026-05-13T07:27:32.8260766Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8261414Z 
2026-05-13T07:27:32.8262391Z     Error Context: test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium/error-context.md
2026-05-13T07:27:32.8263435Z 
2026-05-13T07:27:32.8264414Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8265850Z     test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium/trace.zip
2026-05-13T07:27:32.8267051Z     Usage:
2026-05-13T07:27:32.8267369Z 
2026-05-13T07:27:32.8268444Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium/trace.zip
2026-05-13T07:27:32.8269592Z 
2026-05-13T07:27:32.8270413Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8271060Z 
2026-05-13T07:27:32.8271874Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8272539Z 
2026-05-13T07:27:32.8273045Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8273791Z     Call log:
2026-05-13T07:27:32.8274717Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8275334Z 
2026-05-13T07:27:32.8275471Z 
2026-05-13T07:27:32.8276039Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8276937Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8277833Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8278689Z          |                ^
2026-05-13T07:27:32.8279203Z       58 |   });
2026-05-13T07:27:32.8279560Z       59 |
2026-05-13T07:27:32.8280009Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8280856Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8281477Z 
2026-05-13T07:27:32.8282202Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8283420Z     test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.8285045Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8285687Z 
2026-05-13T07:27:32.8286912Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8288643Z     test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium-retry1/video.webm
2026-05-13T07:27:32.8290199Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8290740Z 
2026-05-13T07:27:32.8291628Z     Error Context: test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium-retry1/error-context.md
2026-05-13T07:27:32.8292657Z 
2026-05-13T07:27:32.8293746Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8295817Z     test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium-retry1/trace.zip
2026-05-13T07:27:32.8296766Z     Usage:
2026-05-13T07:27:32.8297123Z 
2026-05-13T07:27:32.8297993Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-0f9de--ratio-on-0A0E1A-background-chromium-retry1/trace.zip
2026-05-13T07:27:32.8299198Z 
2026-05-13T07:27:32.8299974Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8300802Z 
2026-05-13T07:27:32.8302366Z   9) [chromium] › test/e2e/login-contrast.e2e.test.ts:69:3 › LoginScene contrast › username label has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:32.8303225Z 
2026-05-13T07:27:32.8303705Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8304512Z     Call log:
2026-05-13T07:27:32.8305257Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8305765Z 
2026-05-13T07:27:32.8305885Z 
2026-05-13T07:27:32.8306542Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8307412Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8308554Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8309944Z          |                ^
2026-05-13T07:27:32.8310476Z       58 |   });
2026-05-13T07:27:32.8310941Z       59 |
2026-05-13T07:27:32.8311495Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8312398Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8313001Z 
2026-05-13T07:27:32.8313759Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8315587Z     test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium/test-failed-1.png
2026-05-13T07:27:32.8316764Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8317309Z 
2026-05-13T07:27:32.8318141Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8319420Z     test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium/video.webm
2026-05-13T07:27:32.8320806Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8321567Z 
2026-05-13T07:27:32.8322451Z     Error Context: test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium/error-context.md
2026-05-13T07:27:32.8323380Z 
2026-05-13T07:27:32.8324092Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8325669Z     test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:32.8326525Z     Usage:
2026-05-13T07:27:32.8326784Z 
2026-05-13T07:27:32.8327949Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:32.8328813Z 
2026-05-13T07:27:32.8329593Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8330270Z 
2026-05-13T07:27:32.8331085Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8331633Z 
2026-05-13T07:27:32.8332119Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8332817Z     Call log:
2026-05-13T07:27:32.8333575Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8334264Z 
2026-05-13T07:27:32.8334391Z 
2026-05-13T07:27:32.8334914Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8335684Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8336556Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8337286Z          |                ^
2026-05-13T07:27:32.8337732Z       58 |   });
2026-05-13T07:27:32.8338145Z       59 |
2026-05-13T07:27:32.8338657Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8339584Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8340272Z 
2026-05-13T07:27:32.8341055Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8342523Z     test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.8343959Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8344686Z 
2026-05-13T07:27:32.8345459Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8346869Z     test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium-retry1/video.webm
2026-05-13T07:27:32.8348260Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8348845Z 
2026-05-13T07:27:32.8350067Z     Error Context: test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium-retry1/error-context.md
2026-05-13T07:27:32.8351006Z 
2026-05-13T07:27:32.8351743Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8353247Z     test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:32.8354279Z     Usage:
2026-05-13T07:27:32.8354567Z 
2026-05-13T07:27:32.8355681Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-16b95--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:32.8356775Z 
2026-05-13T07:27:32.8357468Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8358134Z 
2026-05-13T07:27:32.8359196Z   10) [chromium] › test/e2e/login-contrast.e2e.test.ts:75:3 › LoginScene contrast › password label has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:32.8360152Z 
2026-05-13T07:27:32.8360559Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8361191Z     Call log:
2026-05-13T07:27:32.8362056Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8362673Z 
2026-05-13T07:27:32.8362823Z 
2026-05-13T07:27:32.8363317Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8364076Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8365087Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8365794Z          |                ^
2026-05-13T07:27:32.8366216Z       58 |   });
2026-05-13T07:27:32.8366598Z       59 |
2026-05-13T07:27:32.8367061Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8367951Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8368634Z 
2026-05-13T07:27:32.8369463Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8370923Z     test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium/test-failed-1.png
2026-05-13T07:27:32.8372614Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8373226Z 
2026-05-13T07:27:32.8374019Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8375473Z     test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium/video.webm
2026-05-13T07:27:32.8376724Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8377276Z 
2026-05-13T07:27:32.8378240Z     Error Context: test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium/error-context.md
2026-05-13T07:27:32.8379106Z 
2026-05-13T07:27:32.8379845Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8381387Z     test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:32.8382377Z     Usage:
2026-05-13T07:27:32.8382668Z 
2026-05-13T07:27:32.8383716Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:32.8384722Z 
2026-05-13T07:27:32.8385410Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8385975Z 
2026-05-13T07:27:32.8386642Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8387216Z 
2026-05-13T07:27:32.8387685Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8388356Z     Call log:
2026-05-13T07:27:32.8389091Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8389658Z 
2026-05-13T07:27:32.8389789Z 
2026-05-13T07:27:32.8390255Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8391018Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8391732Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8392451Z          |                ^
2026-05-13T07:27:32.8392918Z       58 |   });
2026-05-13T07:27:32.8393342Z       59 |
2026-05-13T07:27:32.8393860Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8394875Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8395578Z 
2026-05-13T07:27:32.8396399Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8397880Z     test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.8399341Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8399906Z 
2026-05-13T07:27:32.8400640Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8402025Z     test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium-retry1/video.webm
2026-05-13T07:27:32.8403401Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8403996Z 
2026-05-13T07:27:32.8405074Z     Error Context: test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium-retry1/error-context.md
2026-05-13T07:27:32.8405890Z 
2026-05-13T07:27:32.8406593Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8408012Z     test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:32.8409540Z     Usage:
2026-05-13T07:27:32.8410017Z 
2026-05-13T07:27:32.8411339Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-dc9ef--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:32.8412709Z 
2026-05-13T07:27:32.8413547Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8414316Z 
2026-05-13T07:27:32.8415279Z   11) [chromium] › test/e2e/login-contrast.e2e.test.ts:81:3 › LoginScene contrast › username input text has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:32.8416153Z 
2026-05-13T07:27:32.8416769Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8417473Z     Call log:
2026-05-13T07:27:32.8418260Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8418813Z 
2026-05-13T07:27:32.8418944Z 
2026-05-13T07:27:32.8419426Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8420218Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8421064Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8421857Z          |                ^
2026-05-13T07:27:32.8422339Z       58 |   });
2026-05-13T07:27:32.8422770Z       59 |
2026-05-13T07:27:32.8423281Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8424323Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8425019Z 
2026-05-13T07:27:32.8425819Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8427312Z     test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium/test-failed-1.png
2026-05-13T07:27:32.8428736Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8429323Z 
2026-05-13T07:27:32.8430095Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8431460Z     test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium/video.webm
2026-05-13T07:27:32.8432832Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8433436Z 
2026-05-13T07:27:32.8434499Z     Error Context: test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium/error-context.md
2026-05-13T07:27:32.8435424Z 
2026-05-13T07:27:32.8436236Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8437686Z     test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:32.8438603Z     Usage:
2026-05-13T07:27:32.8438908Z 
2026-05-13T07:27:32.8439982Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:32.8441134Z 
2026-05-13T07:27:32.8441813Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8442489Z 
2026-05-13T07:27:32.8443167Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8443733Z 
2026-05-13T07:27:32.8444292Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8444955Z     Call log:
2026-05-13T07:27:32.8445716Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8446295Z 
2026-05-13T07:27:32.8446423Z 
2026-05-13T07:27:32.8446932Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8447719Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8448582Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8449366Z          |                ^
2026-05-13T07:27:32.8449903Z       58 |   });
2026-05-13T07:27:32.8450361Z       59 |
2026-05-13T07:27:32.8451057Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8452085Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8452863Z 
2026-05-13T07:27:32.8453707Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8455428Z     test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium-retry1/test-failed-1.png
2026-05-13T07:27:32.8456921Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8457529Z 
2026-05-13T07:27:32.8458244Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8459587Z     test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium-retry1/video.webm
2026-05-13T07:27:32.8460998Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8461544Z 
2026-05-13T07:27:32.8462570Z     Error Context: test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium-retry1/error-context.md
2026-05-13T07:27:32.8463555Z 
2026-05-13T07:27:32.8464496Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:32.8467152Z     test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:32.8468366Z     Usage:
2026-05-13T07:27:32.8468695Z 
2026-05-13T07:27:32.8469989Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-5039a--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:32.8471117Z 
2026-05-13T07:27:32.8471923Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8472789Z 
2026-05-13T07:27:32.8473821Z   12) [chromium] › test/e2e/login-contrast.e2e.test.ts:87:3 › LoginScene contrast › password input text has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:32.8474794Z 
2026-05-13T07:27:32.8475473Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:32.8476105Z     Call log:
2026-05-13T07:27:32.8476842Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:32.8477394Z 
2026-05-13T07:27:32.8477528Z 
2026-05-13T07:27:32.8478059Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:32.8478826Z       56 |     await page.goto('/');
2026-05-13T07:27:32.8479651Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:32.8480420Z          |                ^
2026-05-13T07:27:32.8480892Z       58 |   });
2026-05-13T07:27:32.8481315Z       59 |
2026-05-13T07:27:32.8481852Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:32.8482859Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:32.8483539Z 
2026-05-13T07:27:32.8484437Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:32.8485886Z     test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium/test-failed-1.png
2026-05-13T07:27:32.8487295Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8487918Z 
2026-05-13T07:27:32.8488682Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8490105Z     test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium/video.webm
2026-05-13T07:27:32.8491490Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:32.8492061Z 
2026-05-13T07:27:33.0530467Z     Error Context: test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium/error-context.md
2026-05-13T07:27:33.0544594Z 
2026-05-13T07:27:33.0556951Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0575502Z     test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:33.0580204Z     Usage:
2026-05-13T07:27:33.0592082Z 
2026-05-13T07:27:33.0606162Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:33.0607109Z 
2026-05-13T07:27:33.0607911Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0608565Z 
2026-05-13T07:27:33.0609347Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0609950Z 
2026-05-13T07:27:33.0610464Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:33.0611469Z     Call log:
2026-05-13T07:27:33.0612272Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:33.0613119Z 
2026-05-13T07:27:33.0613243Z 
2026-05-13T07:27:33.0613730Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:33.0614667Z       56 |     await page.goto('/');
2026-05-13T07:27:33.0615447Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:33.0616154Z          |                ^
2026-05-13T07:27:33.0616623Z       58 |   });
2026-05-13T07:27:33.0617037Z       59 |
2026-05-13T07:27:33.0617534Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:33.0618452Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:33.0619145Z 
2026-05-13T07:27:33.0619941Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0621439Z     test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium-retry1/test-failed-1.png
2026-05-13T07:27:33.0622945Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0623524Z 
2026-05-13T07:27:33.0624488Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0626256Z     test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium-retry1/video.webm
2026-05-13T07:27:33.0627751Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0628384Z 
2026-05-13T07:27:33.0629509Z     Error Context: test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium-retry1/error-context.md
2026-05-13T07:27:33.0630515Z 
2026-05-13T07:27:33.0631340Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0632896Z     test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:33.0634453Z     Usage:
2026-05-13T07:27:33.0634816Z 
2026-05-13T07:27:33.0636059Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-a12ed--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:33.0637145Z 
2026-05-13T07:27:33.0637942Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0638543Z 
2026-05-13T07:27:33.0639592Z   13) [chromium] › test/e2e/login-contrast.e2e.test.ts:93:3 › LoginScene contrast › submit CTA button text has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:33.0640556Z 
2026-05-13T07:27:33.0641080Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:33.0641818Z     Call log:
2026-05-13T07:27:33.0642671Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:33.0643534Z 
2026-05-13T07:27:33.0643680Z 
2026-05-13T07:27:33.0644486Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:33.0645455Z       56 |     await page.goto('/');
2026-05-13T07:27:33.0646334Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:33.0647102Z          |                ^
2026-05-13T07:27:33.0647603Z       58 |   });
2026-05-13T07:27:33.0648070Z       59 |
2026-05-13T07:27:33.0648614Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:33.0649598Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:33.0650331Z 
2026-05-13T07:27:33.0651211Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0652619Z     test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium/test-failed-1.png
2026-05-13T07:27:33.0653963Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0654675Z 
2026-05-13T07:27:33.0655455Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0656911Z     test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium/video.webm
2026-05-13T07:27:33.0658254Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0658840Z 
2026-05-13T07:27:33.0659856Z     Error Context: test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium/error-context.md
2026-05-13T07:27:33.0660816Z 
2026-05-13T07:27:33.0661605Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0663008Z     test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:33.0664003Z     Usage:
2026-05-13T07:27:33.0664549Z 
2026-05-13T07:27:33.0665757Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium/trace.zip
2026-05-13T07:27:33.0666962Z 
2026-05-13T07:27:33.0667718Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0668330Z 
2026-05-13T07:27:33.0669085Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0669669Z 
2026-05-13T07:27:33.0670175Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:33.0670902Z     Call log:
2026-05-13T07:27:33.0671705Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:33.0672291Z 
2026-05-13T07:27:33.0672427Z 
2026-05-13T07:27:33.0672939Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:33.0673778Z       56 |     await page.goto('/');
2026-05-13T07:27:33.0674955Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:33.0675772Z          |                ^
2026-05-13T07:27:33.0676316Z       58 |   });
2026-05-13T07:27:33.0676770Z       59 |
2026-05-13T07:27:33.0677299Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:33.0678315Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:33.0679038Z 
2026-05-13T07:27:33.0679869Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0681737Z     test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium-retry1/test-failed-1.png
2026-05-13T07:27:33.0683216Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0683808Z 
2026-05-13T07:27:33.0684981Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0686482Z     test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium-retry1/video.webm
2026-05-13T07:27:33.0688071Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0693193Z 
2026-05-13T07:27:33.0694535Z     Error Context: test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium-retry1/error-context.md
2026-05-13T07:27:33.0695579Z 
2026-05-13T07:27:33.0696423Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0697953Z     test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:33.0698957Z     Usage:
2026-05-13T07:27:33.0699256Z 
2026-05-13T07:27:33.0700440Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-8de64--has-≥-4-5-1-contrast-ratio-chromium-retry1/trace.zip
2026-05-13T07:27:33.0701488Z 
2026-05-13T07:27:33.0702233Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0702876Z 
2026-05-13T07:27:33.0704331Z   14) [chromium] › test/e2e/login-contrast.e2e.test.ts:101:3 › LoginScene contrast › focused input border-color is accent #22D3EE (rgb 34,211,238) 
2026-05-13T07:27:33.0705365Z 
2026-05-13T07:27:33.0705863Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:33.0706533Z     Call log:
2026-05-13T07:27:33.0707305Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:33.0707839Z 
2026-05-13T07:27:33.0707965Z 
2026-05-13T07:27:33.0708464Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:33.0709245Z       56 |     await page.goto('/');
2026-05-13T07:27:33.0710056Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:33.0711040Z          |                ^
2026-05-13T07:27:33.0711525Z       58 |   });
2026-05-13T07:27:33.0711943Z       59 |
2026-05-13T07:27:33.0712470Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:33.0713463Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:33.0714337Z 
2026-05-13T07:27:33.0715225Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0716634Z     test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium/test-failed-1.png
2026-05-13T07:27:33.0735002Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0744745Z 
2026-05-13T07:27:33.0745760Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0765337Z     test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium/video.webm
2026-05-13T07:27:33.0770389Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0771025Z 
2026-05-13T07:27:33.0771900Z     Error Context: test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium/error-context.md
2026-05-13T07:27:33.0772871Z 
2026-05-13T07:27:33.0773751Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0784655Z     test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium/trace.zip
2026-05-13T07:27:33.0785511Z     Usage:
2026-05-13T07:27:33.0785693Z 
2026-05-13T07:27:33.0786447Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium/trace.zip
2026-05-13T07:27:33.0787201Z 
2026-05-13T07:27:33.0787772Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0788195Z 
2026-05-13T07:27:33.0788731Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0789133Z 
2026-05-13T07:27:33.0789439Z     TimeoutError: page.waitForSelector: Timeout 15000ms exceeded.
2026-05-13T07:27:33.0790289Z     Call log:
2026-05-13T07:27:33.0790889Z     [2m  - waiting for locator('form#login-form h1') to be visible[22m
2026-05-13T07:27:33.0791281Z 
2026-05-13T07:27:33.0791301Z 
2026-05-13T07:27:33.0791674Z       55 |     // Wait for the form heading to confirm the form is present in the DOM.
2026-05-13T07:27:33.0792245Z       56 |     await page.goto('/');
2026-05-13T07:27:33.0792882Z     > 57 |     await page.waitForSelector('form#login-form h1', { timeout: 15_000 });
2026-05-13T07:27:33.0793452Z          |                ^
2026-05-13T07:27:33.0793747Z       58 |   });
2026-05-13T07:27:33.0794000Z       59 |
2026-05-13T07:27:33.0794775Z       60 |   // --- Test 1: heading contrast ---
2026-05-13T07:27:33.0795614Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/login-contrast.e2e.test.ts:57:16
2026-05-13T07:27:33.0796352Z 
2026-05-13T07:27:33.0796897Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0797923Z     test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium-retry1/test-failed-1.png
2026-05-13T07:27:33.0799068Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0799502Z 
2026-05-13T07:27:33.0800148Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0801316Z     test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium-retry1/video.webm
2026-05-13T07:27:33.0802467Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0802823Z 
2026-05-13T07:27:33.0803484Z     Error Context: test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium-retry1/error-context.md
2026-05-13T07:27:33.0804367Z 
2026-05-13T07:27:33.0804915Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0806139Z     test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium-retry1/trace.zip
2026-05-13T07:27:33.0806983Z     Usage:
2026-05-13T07:27:33.0807159Z 
2026-05-13T07:27:33.0808028Z         pnpm exec playwright show-trace test-results/login-contrast.e2e-LoginSc-db3ea-cent-22D3EE-rgb-34-211-238--chromium-retry1/trace.zip
2026-05-13T07:27:33.0808855Z 
2026-05-13T07:27:33.0809304Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0809674Z 
2026-05-13T07:27:33.0810455Z   15) [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-13T07:27:33.0811114Z 
2026-05-13T07:27:33.0811578Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-13T07:27:33.0812084Z 
2026-05-13T07:27:33.0812410Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-13T07:27:33.0813140Z     Expected: visible
2026-05-13T07:27:33.0813477Z     Timeout: 5000ms
2026-05-13T07:27:33.0813861Z     Error: element(s) not found
2026-05-13T07:27:33.0814108Z 
2026-05-13T07:27:33.0814350Z     Call log:
2026-05-13T07:27:33.0814841Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-13T07:27:33.0815579Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-13T07:27:33.0815989Z 
2026-05-13T07:27:33.0815998Z 
2026-05-13T07:27:33.0816104Z       36 |
2026-05-13T07:27:33.0816575Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-13T07:27:33.0817411Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-13T07:27:33.0818256Z          |                                                                           ^
2026-05-13T07:27:33.0818732Z       39 |       timeout: 5_000,
2026-05-13T07:27:33.0819076Z       40 |     });
2026-05-13T07:27:33.0819355Z       41 |
2026-05-13T07:27:33.0819893Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-13T07:27:33.0820354Z 
2026-05-13T07:27:33.0820938Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0821994Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/test-failed-1.png
2026-05-13T07:27:33.0823177Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0823580Z 
2026-05-13T07:27:33.0824238Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0825195Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/video.webm
2026-05-13T07:27:33.0826319Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0826761Z 
2026-05-13T07:27:33.0827451Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/error-context.md
2026-05-13T07:27:33.0828154Z 
2026-05-13T07:27:33.0828714Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0829833Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-13T07:27:33.0830557Z     Usage:
2026-05-13T07:27:33.0830702Z 
2026-05-13T07:27:33.0831355Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-13T07:27:33.0832053Z 
2026-05-13T07:27:33.0832531Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0832955Z 
2026-05-13T07:27:33.0833572Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0834308Z 
2026-05-13T07:27:33.0834895Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-13T07:27:33.0835447Z 
2026-05-13T07:27:33.0835760Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-13T07:27:33.0836292Z     Expected: visible
2026-05-13T07:27:33.0836590Z     Timeout: 5000ms
2026-05-13T07:27:33.0836976Z     Error: element(s) not found
2026-05-13T07:27:33.0837187Z 
2026-05-13T07:27:33.0837288Z     Call log:
2026-05-13T07:27:33.0837716Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-13T07:27:33.0838398Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-13T07:27:33.0838787Z 
2026-05-13T07:27:33.0838794Z 
2026-05-13T07:27:33.0838916Z       36 |
2026-05-13T07:27:33.0839453Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-13T07:27:33.0840543Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-13T07:27:33.0841421Z          |                                                                           ^
2026-05-13T07:27:33.0841990Z       39 |       timeout: 5_000,
2026-05-13T07:27:33.0842338Z       40 |     });
2026-05-13T07:27:33.0842599Z       41 |
2026-05-13T07:27:33.0843093Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-13T07:27:33.0843513Z 
2026-05-13T07:27:33.0844063Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0845386Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/test-failed-1.png
2026-05-13T07:27:33.0846822Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0847319Z 
2026-05-13T07:27:33.0847964Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0848919Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/video.webm
2026-05-13T07:27:33.0849990Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0850376Z 
2026-05-13T07:27:33.0851230Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/error-context.md
2026-05-13T07:27:33.0852122Z 
2026-05-13T07:27:33.0852804Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0853805Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-13T07:27:33.0854594Z     Usage:
2026-05-13T07:27:33.0854733Z 
2026-05-13T07:27:33.0855536Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-13T07:27:33.0856505Z 
2026-05-13T07:27:33.0857115Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0857732Z 
2026-05-13T07:27:33.0859083Z   16) [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-13T07:27:33.0860112Z 
2026-05-13T07:27:33.0860679Z     TypeError: [2mexpect([22m[31mreceived[39m[2m).[22mtoMatch[2m([22m[32mexpected[39m[2m)[22m
2026-05-13T07:27:33.0861192Z 
2026-05-13T07:27:33.0861566Z     [1mMatcher error[22m: [31mreceived[39m value must be a string
2026-05-13T07:27:33.0861940Z 
2026-05-13T07:27:33.0862226Z     Received has value: [31mundefined[39m
2026-05-13T07:27:33.0862530Z 
2026-05-13T07:27:33.0862654Z       32 |
2026-05-13T07:27:33.0863106Z       33 |     // Frame key must match Run R pattern: '0028-NaviRunR_NNN'
2026-05-13T07:27:33.0863873Z     > 34 |     expect(frameWhileRunning).toMatch(/^0028-NaviRunR_\d{3}$/);
2026-05-13T07:27:33.0864496Z          |                               ^
2026-05-13T07:27:33.0864926Z       35 |
2026-05-13T07:27:33.0865364Z       36 |     // Release right arrow and wait for stop
2026-05-13T07:27:33.0865851Z       37 |     await page.keyboard.up('ArrowRight');
2026-05-13T07:27:33.0866562Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:34:31
2026-05-13T07:27:33.0867032Z 
2026-05-13T07:27:33.0867658Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0868606Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/test-failed-1.png
2026-05-13T07:27:33.0869801Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0870275Z 
2026-05-13T07:27:33.0870889Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0871899Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/video.webm
2026-05-13T07:27:33.0873109Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0873501Z 
2026-05-13T07:27:33.0874278Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/error-context.md
2026-05-13T07:27:33.0875022Z 
2026-05-13T07:27:33.0875705Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0876768Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-13T07:27:33.0877482Z     Usage:
2026-05-13T07:27:33.0877652Z 
2026-05-13T07:27:33.0878414Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-13T07:27:33.0879240Z 
2026-05-13T07:27:33.0879810Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0880468Z 
2026-05-13T07:27:33.0881057Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0881454Z 
2026-05-13T07:27:33.0882109Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-13T07:27:33.0882718Z 
2026-05-13T07:27:33.0883022Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-13T07:27:33.0883587Z     Expected: visible
2026-05-13T07:27:33.0883982Z     Timeout: 15000ms
2026-05-13T07:27:33.0884638Z     Error: element(s) not found
2026-05-13T07:27:33.0884935Z 
2026-05-13T07:27:33.0885076Z     Call log:
2026-05-13T07:27:33.0885688Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-13T07:27:33.0886591Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-13T07:27:33.0887280Z 
2026-05-13T07:27:33.0887292Z 
2026-05-13T07:27:33.0887463Z        at fixtures.ts:172
2026-05-13T07:27:33.0887722Z 
2026-05-13T07:27:33.0887895Z       170 |  */
2026-05-13T07:27:33.0888566Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-13T07:27:33.0889605Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-13T07:27:33.0890497Z           |                                                                ^
2026-05-13T07:27:33.0891090Z       173 |     timeout: 15_000,
2026-05-13T07:27:33.0891518Z       174 |   });
2026-05-13T07:27:33.0891864Z       175 | }
2026-05-13T07:27:33.0892698Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-13T07:27:33.0893956Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:22:11
2026-05-13T07:27:33.0894652Z 
2026-05-13T07:27:33.0895266Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0896398Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/test-failed-1.png
2026-05-13T07:27:33.0898017Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0898560Z 
2026-05-13T07:27:33.0899298Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0900690Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/video.webm
2026-05-13T07:27:33.0902239Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0902778Z 
2026-05-13T07:27:33.0903743Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/error-context.md
2026-05-13T07:27:33.0904876Z 
2026-05-13T07:27:33.0905691Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0907096Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-13T07:27:33.0908287Z     Usage:
2026-05-13T07:27:33.0908480Z 
2026-05-13T07:27:33.0909531Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-13T07:27:33.0910624Z 
2026-05-13T07:27:33.0911308Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0911842Z 
2026-05-13T07:27:33.0913106Z   17) [chromium] › test/e2e/ws-kill-reconnect.e2e.test.ts:16:1 › WS-kill: login → kill WS → SDK reconnects within grace → canvas still truthy + chat round-trips 
2026-05-13T07:27:33.0914250Z 
2026-05-13T07:27:33.0915037Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-13T07:27:33.0915949Z 
2026-05-13T07:27:33.0916296Z     Expected: [32m"mvp-room"[39m
2026-05-13T07:27:33.0916889Z     Received: [31mundefined[39m
2026-05-13T07:27:33.0917216Z 
2026-05-13T07:27:33.0917705Z       57 |     () => (window as unknown as { __rebno?: { roomId?: string } }).__rebno?.roomId,
2026-05-13T07:27:33.0918404Z       58 |   );
2026-05-13T07:27:33.0918924Z     > 59 |   expect(postReconnectRoomId).toBe('mvp-room');
2026-05-13T07:27:33.0919541Z          |                               ^
2026-05-13T07:27:33.0919995Z       60 |
2026-05-13T07:27:33.0920812Z       61 |   // 6. Chat round-trip post-reconnect — confirms message dispatch goes through
2026-05-13T07:27:33.0921930Z       62 |   //    the new room object (InputDispatcher.setRoom fix, 06-12 §5).
2026-05-13T07:27:33.0923032Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/ws-kill-reconnect.e2e.test.ts:59:31
2026-05-13T07:27:33.0923723Z 
2026-05-13T07:27:33.0924655Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0926067Z     test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium/test-failed-1.png
2026-05-13T07:27:33.0927600Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0928140Z 
2026-05-13T07:27:33.0928860Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0930131Z     test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium/video.webm
2026-05-13T07:27:33.0931567Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0932092Z 
2026-05-13T07:27:33.0932941Z     Error Context: test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium/error-context.md
2026-05-13T07:27:33.0933856Z 
2026-05-13T07:27:33.0934692Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0936053Z     test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium/trace.zip
2026-05-13T07:27:33.0937183Z     Usage:
2026-05-13T07:27:33.0937392Z 
2026-05-13T07:27:33.0938344Z         pnpm exec playwright show-trace test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium/trace.zip
2026-05-13T07:27:33.0939339Z 
2026-05-13T07:27:33.0940020Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0940554Z 
2026-05-13T07:27:33.0941243Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0941800Z 
2026-05-13T07:27:33.0942453Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-13T07:27:33.0943064Z 
2026-05-13T07:27:33.0943368Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-13T07:27:33.0944302Z     Expected: visible
2026-05-13T07:27:33.0944692Z     Timeout: 15000ms
2026-05-13T07:27:33.0945143Z     Error: element(s) not found
2026-05-13T07:27:33.0945428Z 
2026-05-13T07:27:33.0945608Z     Call log:
2026-05-13T07:27:33.0946218Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-13T07:27:33.0947119Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-13T07:27:33.0947599Z 
2026-05-13T07:27:33.0947610Z 
2026-05-13T07:27:33.0947779Z        at fixtures.ts:172
2026-05-13T07:27:33.0948039Z 
2026-05-13T07:27:33.0948181Z       170 |  */
2026-05-13T07:27:33.0948850Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-13T07:27:33.0949888Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-13T07:27:33.0950766Z           |                                                                ^
2026-05-13T07:27:33.0951361Z       173 |     timeout: 15_000,
2026-05-13T07:27:33.0951793Z       174 |   });
2026-05-13T07:27:33.0952146Z       175 | }
2026-05-13T07:27:33.0952966Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-13T07:27:33.0954355Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/ws-kill-reconnect.e2e.test.ts:23:9
2026-05-13T07:27:33.0955046Z 
2026-05-13T07:27:33.0955803Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-13T07:27:33.0957274Z     test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium-retry1/test-failed-1.png
2026-05-13T07:27:33.0958887Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0959407Z 
2026-05-13T07:27:33.0960138Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0961490Z     test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium-retry1/video.webm
2026-05-13T07:27:33.0963036Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0963562Z 
2026-05-13T07:27:33.0964811Z     Error Context: test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium-retry1/error-context.md
2026-05-13T07:27:33.0965828Z 
2026-05-13T07:27:33.0966593Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-13T07:27:33.0967976Z     test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium-retry1/trace.zip
2026-05-13T07:27:33.0968945Z     Usage:
2026-05-13T07:27:33.0969145Z 
2026-05-13T07:27:33.0970170Z         pnpm exec playwright show-trace test-results/ws-kill-reconnect.e2e-WS-k-04091-ill-truthy-chat-round-trips-chromium-retry1/trace.zip
2026-05-13T07:27:33.0971234Z 
2026-05-13T07:27:33.0971917Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-13T07:27:33.0972595Z 
2026-05-13T07:27:33.0972747Z   17 failed
2026-05-13T07:27:33.0973972Z     [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-13T07:27:33.0976187Z     [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-13T07:27:33.0978277Z     [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-13T07:27:33.0980378Z     [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) 
2026-05-13T07:27:33.0982382Z     [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-13T07:27:33.0984520Z     [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-13T07:27:33.0986176Z     [chromium] › test/e2e/cookie-reload.e2e.test.ts:15:1 › Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-13T07:27:33.0987813Z     [chromium] › test/e2e/login-contrast.e2e.test.ts:61:3 › LoginScene contrast › heading has ≥ 4.5:1 contrast ratio on #0A0E1A background 
2026-05-13T07:27:33.0989673Z     [chromium] › test/e2e/login-contrast.e2e.test.ts:69:3 › LoginScene contrast › username label has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:33.0991471Z     [chromium] › test/e2e/login-contrast.e2e.test.ts:75:3 › LoginScene contrast › password label has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:33.0993320Z     [chromium] › test/e2e/login-contrast.e2e.test.ts:81:3 › LoginScene contrast › username input text has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:33.0995291Z     [chromium] › test/e2e/login-contrast.e2e.test.ts:87:3 › LoginScene contrast › password input text has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:33.0997208Z     [chromium] › test/e2e/login-contrast.e2e.test.ts:93:3 › LoginScene contrast › submit CTA button text has ≥ 4.5:1 contrast ratio 
2026-05-13T07:27:33.0999222Z     [chromium] › test/e2e/login-contrast.e2e.test.ts:101:3 › LoginScene contrast › focused input border-color is accent #22D3EE (rgb 34,211,238) 
2026-05-13T07:27:33.1001283Z     [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-13T07:27:33.1003677Z     [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-13T07:27:33.1006237Z     [chromium] › test/e2e/ws-kill-reconnect.e2e.test.ts:16:1 › WS-kill: login → kill WS → SDK reconnects within grace → canvas still truthy + chat round-trips 
2026-05-13T07:27:33.1007449Z   4 passed (9.0m)
2026-05-13T07:27:33.1051909Z /home/runner/work/rebno/rebno/apps/client:
2026-05-13T07:27:33.1053199Z  ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @rebno/client@0.1.0 test:e2e: `playwright test`
2026-05-13T07:27:33.1054450Z Exit status 1
2026-05-13T07:27:33.1200830Z ##[error]Process completed with exit code 1.
